// 1.引入网络请求需要的基础模块
import Vue from "vue";
import axios from 'axios';
import qs from 'qs';
import router from "../router/index.js"


// 2.根据环境变量设置请求域名 方便后期操作后端返回的图片资源（'/upload/img/1.jpeg'）
if(process.env.NODE_ENV =="development"){
    // 本地开发模式  
    Vue.prototype.$pre = "http://localhost:3000"
    // 此处只为测试方便使用线上地址： 
    // Vue.prototype.$pre = "http://api.aslegou.top"
}else{
    // 打包生成模式
    Vue.prototype.$pre = "http://api.aslegou.top"
}

// 3.设置axios请求的基础路径(如果使用代理不需要此配置项)
axios.defaults.baseURL = Vue.prototype.$pre;


// 4.设置请求拦截,每一次发请求给后端，需要统一加的参数在请求拦截中做，比如加token
//请求拦截return的内容就是后端收到的真正的请求信息
axios.interceptors.request.use((config)=>{
    // config中包含的是我们请求的数据信息 headers  data.....
    let userInfo = localStorage.getItem('userInfo')||""
    if(userInfo!=""){
        config.headers.authorization=JSON.parse(userInfo).token
    }
    return config
})


  // 5.设置响应拦截
axios.interceptors.response.use((res)=>{
    // res:包含的是请求后端返回的数据结果  切记最后一定要返回res
    // console.log('响应拦截:',res.data)
    if(res.data.code == 200){
        return Promise.resolve(res.data.list)
    }else if(res.data.code == 403){
        // 登录过期
        return Promise.reject(res)
    }else if(res.data.code == 500){
        // 请求参数错误
        return Promise.reject(res)
    }
})

/**
 * 6.定义get请求并导出
 * url:'数据请求地址' ：''
 * params:提交参数 ：{}
 * */ 
export const getData=(url,params={})=>{
    return axios.get(url,{params})
}

/**
 * 7.定义post请求并导出
 * url:'数据请求地址' ：''
 * params:提交参数 ：{}
 * isFile:是否上传文件 bool 默认不上传文件
 * */ 
export const postData=(url,params={},isFile=false)=>{

    let data = null;
    if(isFile){
        // 文件上传 FormData()
        data = new FormData();
        // 组装表单数据
        for(let key in params){
            data.append(key,params[key])
        }
    }else{
        // 无文件上传
        data = qs.stringify(params)
    }
    return axios.post(url,data)
}